import type * as T from './type'
import http from '@/utils/http'
import type { LabelValueState } from '@/types/global'

export type * from './type'

/**
 * 角色字典
 */
export function listRoleDict(query: T.RoleQuery) {
  return http.post<LabelValueState[]>(`/system/role/dict`, query)
}

/**
 * 角色列表
 * @param query
 */
export function listRole(query: T.RoleQuery) {
  return http.post<T.RoleResp[]>(`/system/role/list`, query)
}

/**
 * 角色详情
 * @param id
 */
export function getRole(id: string) {
  return http.get<T.RoleDetailResp>(`/system/role/detail/${id}`)
}

/**
 * 新增角色
 * @param data
 */
export function addRole(data: any) {
  return http.post(`/system/role/create`, data)
}

/**
 * 修改角色
 * @param data
 * @param id
 */
export function updateRole(data: any, id: string) {
  return http.put(`/system/role/update/${id}`, data)
}

/**
 * 删除角色
 * @param ids
 */
export function deleteRole(ids: string | Array<string>) {
  return http.del(`/system/role/delete/${ids}`)
}

/**
 * 修改角色权限
 * @param id
 * @param data
 */
export function updateRolePermission(id: string, data: any) {
  return http.put(`/system/role/${id}/permission`, data)
}

/**
 * 查询角色关联用户
 * @param id
 * @param query
 */
export function pageRoleUser(id: string | number, query: T.RoleUserPageQuery) {
  return http.get<PageRes<T.RoleUserResp[]>>(`/system/role/${id}/user`, query)
}

/**
 * 分配角色给批量用户
 * @param id 角色ID
 * @param userIds 用户ID列表
 */
export function assignToUsers(id: string | number, userIds: Array<string>) {
  return http.post(`/system/role/assign/${id}/users`, userIds)
}

/**
 * 取消分配角色给用户
 * @param id 角色ID
 * @param userIds 用户ID列表
 */
export function unassignFromUsers(id: string | number, userIds: Array<string | number>) {
  return http.del(`/system/role/unassign/${id}/users`, userIds)
}

/**
 * 查询角色关联的用户ID列表
 * @param id 角色ID
 */
export function listRoleUserId(id: string | number) {
  return http.get(`/system/role/${id}/user/id`)
}
